/** layui-v2.3.0 MIT License By https://www.layui.com */
layui.define('jquery', function (e) {
  'use strict'
  var i = layui.$,
    n =
      (layui.hint(),
      layui.device(),
      {
        config: {},
        set: function (e) {
          var n = this
          return (n.config = i.extend({}, n.config, e)), n
        },
        on: function (e, i) {
          return layui.onevent.call(this, t, e, i)
        }
      }),
    t = 'carousel',
    a = 'layui-this',
    l = '>*[carousel-item]>*',
    o = 'layui-carousel-left',
    r = 'layui-carousel-right',
    d = 'layui-carousel-prev',
    s = 'layui-carousel-next',
    u = 'layui-carousel-arrow',
    c = 'layui-carousel-ind',
    m = function (e) {
      var t = this
      ;(t.config = i.extend({}, t.config, n.config, e)), t.render()
    }
  ;(m.prototype.config = {
    width: '600px',
    height: '280px',
    full: !1,
    arrow: 'hover',
    indicator: 'inside',
    autoplay: !0,
    interval: 3e3,
    anim: '',
    trigger: 'click',
    index: 0
  }),
    (m.prototype.render = function () {
      var e = this,
        n = e.config
      ;(n.elem = i(n.elem)),
        n.elem[0] &&
          ((e.elemItem = n.elem.find(l)),
          n.index < 0 && (n.index = 0),
          n.index >= e.elemItem.length && (n.index = e.elemItem.length - 1),
          n.interval < 800 && (n.interval = 800),
          n.full
            ? n.elem.css({
                position: 'fixed',
                width: '100%',
                height: '100%',
                zIndex: 9999
              })
            : n.elem.css({ width: n.width, height: n.height }),
          n.elem.attr('lay-anim', n.anim),
          e.elemItem.eq(n.index).addClass(a),
          e.elemItem.length <= 1 ||
            (e.indicator(), e.arrow(), e.autoplay(), e.events()))
    }),
    (m.prototype.reload = function (e) {
      var n = this
      clearInterval(n.timer), (n.config = i.extend({}, n.config, e)), n.render()
    }),
    (m.prototype.prevIndex = function () {
      var e = this,
        i = e.config,
        n = i.index - 1
      return n < 0 && (n = e.elemItem.length - 1), n
    }),
    (m.prototype.nextIndex = function () {
      var e = this,
        i = e.config,
        n = i.index + 1
      return n >= e.elemItem.length && (n = 0), n
    }),
    (m.prototype.addIndex = function (e) {
      var i = this,
        n = i.config
      ;(e = e || 1),
        (n.index = n.index + e),
        n.index >= i.elemItem.length && (n.index = 0)
    }),
    (m.prototype.subIndex = function (e) {
      var i = this,
        n = i.config
      ;(e = e || 1),
        (n.index = n.index - e),
        n.index < 0 && (n.index = i.elemItem.length - 1)
    }),
    (m.prototype.autoplay = function () {
      var e = this,
        i = e.config
      i.autoplay &&
        (e.timer = setInterval(function () {
          e.slide()
        }, i.interval))
    }),
    (m.prototype.arrow = function () {
      var e = this,
        n = e.config,
        t = i(
          [
            '<button class="layui-icon ' +
              u +
              '" lay-type="sub">' +
              ('updown' === n.anim ? '&#xe619;' : '&#xe603;') +
              '</button>',
            '<button class="layui-icon ' +
              u +
              '" lay-type="add">' +
              ('updown' === n.anim ? '&#xe61a;' : '&#xe602;') +
              '</button>'
          ].join('')
        )
      n.elem.attr('lay-arrow', n.arrow),
        n.elem.find('.' + u)[0] && n.elem.find('.' + u).remove(),
        n.elem.append(t),
        t.on('click', function () {
          var n = i(this),
            t = n.attr('lay-type')
          e.slide(t)
        })
    }),
    (m.prototype.indicator = function () {
      var e = this,
        n = e.config,
        t = (e.elemInd = i(
          [
            '<div class="' + c + '"><ul>',
            (function () {
              var i = []
              return (
                layui.each(e.elemItem, function (e) {
                  i.push(
                    '<li' +
                      (n.index === e ? ' class="layui-this"' : '') +
                      '></li>'
                  )
                }),
                i.join('')
              )
            })(),
            '</ul></div>'
          ].join('')
        ))
      n.elem.attr('lay-indicator', n.indicator),
        n.elem.find('.' + c)[0] && n.elem.find('.' + c).remove(),
        n.elem.append(t),
        'updown' === n.anim && t.css('margin-top', -(t.height() / 2)),
        t
          .find('li')
          .on('hover' === n.trigger ? 'mouseover' : n.trigger, function () {
            var t = i(this),
              a = t.index()
            a > n.index
              ? e.slide('add', a - n.index)
              : a < n.index && e.slide('sub', n.index - a)
          })
    }),
    (m.prototype.slide = function (e, i) {
      var n = this,
        l = n.elemItem,
        u = n.config,
        c = u.index,
        m = u.elem.attr('lay-filter')
      n.haveSlide ||
        ('sub' === e
          ? (n.subIndex(i),
            l.eq(u.index).addClass(d),
            setTimeout(function () {
              l.eq(c).addClass(r), l.eq(u.index).addClass(r)
            }, 50))
          : (n.addIndex(i),
            l.eq(u.index).addClass(s),
            setTimeout(function () {
              l.eq(c).addClass(o), l.eq(u.index).addClass(o)
            }, 50)),
        setTimeout(function () {
          l.removeClass(a + ' ' + d + ' ' + s + ' ' + o + ' ' + r),
            l.eq(u.index).addClass(a),
            (n.haveSlide = !1)
        }, 300),
        n.elemInd.find('li').eq(u.index).addClass(a).siblings().removeClass(a),
        (n.haveSlide = !0),
        layui.event.call(this, t, 'change(' + m + ')', {
          index: u.index,
          prevIndex: c,
          item: l.eq(u.index)
        }))
    }),
    (m.prototype.events = function () {
      var e = this,
        i = e.config
      i.elem.data('haveEvents') ||
        (i.elem
          .on('mouseenter', function () {
            clearInterval(e.timer)
          })
          .on('mouseleave', function () {
            e.autoplay()
          }),
        i.elem.data('haveEvents', !0))
    }),
    (n.render = function (e) {
      var i = new m(e)
      return i
    }),
    e(t, n)
})
